package com.oop.fanxing;

import java.util.ArrayList;
import java.util.List;

public class o3 {
    public static void main(String[] args) {
        //1.给泛型的数据类型必须是引用类型
        List<Integer> list1 = new ArrayList<Integer>(); //可以
        //List<int> list2 = new ArrayList<int>(); 错
        List<A> list3 = new ArrayList<A>(); //可以

        //2.在给泛型指定具体类型后，可以传入该类型或者其子类类型
        Pig<A> pig1 = new Pig<A>(new A()); //A 指向 E，所以构造器是A e，所以才可以new A()传入构造器里
        Pig<A> pig2 = new Pig<A>(new B()); //B继承A后才可以

        //3.泛型使用形式可以简写
        List<Integer> list4 = new ArrayList<Integer>();
        List<Integer> list5 = new ArrayList<>(); //简写，编译器会进行类型推断，推荐这个写法
        Pig pig3 = new Pig(new A()); //这样写默认Object类型

    }
}

class A{
}
class B extends A{}

class Pig<E>{
    E e;

    public Pig(E e){
        this.e = e;
    }

}